/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pkgBlackJack;

import Main.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JOptionPane;

/**
 *
 * @author Usager
 */
public class GererEvenementBJ extends KeyAdapter implements ActionListener {

    Blackjack BJ;
    int carte = 0;
    int position = 0;
    private Frame frame;

    /**
     * Constructeur de la classe GererEvenementBJ
     * @param BJ: Pour avoir acces au contenu de la classe Blackjack
     * @param frame: Pour avoir acces au panneau Blackjack
     */
    public GererEvenementBJ(Blackjack BJ, Frame frame) {
        this.BJ = BJ;
        this.frame = frame;
    }

    /**
     * Methode pour gerer les evenements au clavier
     * @param e: Prend en note le caractère taper par l'utilisateur
     */
    @Override
    public void keyTyped(KeyEvent e) {
        System.out.println(BJ.txtMise.getText());
        if (e.getKeyChar() == 'f' || e.getKeyChar() == 'd') {
            e.consume();
        }
        try {
            BJ.mise = Double.parseDouble(BJ.txtMise.getText() + e.getKeyChar());
        } catch (Exception exc) {
            e.consume();
            if (BJ.txtMise.getText().equals("")) {
                BJ.mise = 0;
            }
        }
        if ((BJ.mise <= frame.argent) && (BJ.mise > 0)) {
            BJ.btnJouer.setEnabled(true);
        } else if (BJ.txtMise.getText().equals("")) {
            BJ.btnJouer.setEnabled(false);
        } else {
            BJ.btnJouer.setEnabled(false);
        }
    }

    /**
     * Methode pour gerer les evenements sur les JComponents
     * @param ae: Prendre en note l'action de l'utilisateur
     */
    public void actionPerformed(ActionEvent ae) {
        if (ae.getSource() == BJ.btnQuitter) {
            frame.mainPanel.removeAll();
            frame.mainPanel.add(frame.bienvenue);
            frame.setSize(615, 400);
            frame.validate();
            frame.getRootPane();
            frame.repaint();
        }
        if (ae.getSource() == BJ.btnJouer) {
            BJ.btnPiocherJoueur.setEnabled(true);
            BJ.txtMise.setEnabled(false);
            BJ.btnJouer.setEnabled(false);
            BJ.lblStatsJoueurArgent.setText("Montant d'argent: " + (frame.argent - BJ.mise) + "$");
            BJ.lblStatsJoueurDifferentiel.setText("Differentiel: " + (BJ.differentielJoueur - BJ.mise) + "$");
        }
        if (ae.getSource() == BJ.btnPiocherJoueur) {
            //Piger une carte, l'ajouter au panneau et gérer les nombres du jeu
            BJ.btnJouer.setEnabled(false);
            BJ.txtMise.setEnabled(false);
            BJ.btnQuitter.setEnabled(false);
            do {
                BJ.carteAleatoire = BJ.aleatoire.nextInt(52) + 1;
                BJ.cartes.add(BJ.carteAleatoire);
                position = BJ.cartes.size() - 1;
                System.out.println("Position :" + position);
                carte = (BJ.cartes.get(position)) % 13;
                System.out.print("Nouvelle Carte: " + BJ.cartes.get(position) + "\n");
                System.out.print("Nouvelle Carte: " + BJ.carteAleatoire + "\n");
                for (int i = 0; i < position; i++) {
                    if (BJ.cartes.get(i) == BJ.cartes.get(position)) {
                        //System.out.println(cartes.get(i));
                        BJ.fail = 2;
                        System.out.println("ÉPIC FAIL!");
                        BJ.cartes.remove(position);
                        BJ.carteAleatoire = BJ.aleatoire.nextInt(52) + 1;
                        BJ.cartes.add(BJ.carteAleatoire);
                        i = 0;
                        System.out.println("Position :" + position);
                        carte = (BJ.cartes.get(position)) % 13;
                        System.out.print("Nouvelle Carte: " + BJ.cartes.get(position) + "\n");
                        System.out.print("Nouvelle Carte: " + BJ.carteAleatoire + "\n");
                    } else {
                        //System.out.println(cartes.get(i)+"\n");
                        BJ.fail = 1;
                        System.out.println("Normal Fail");
                    }
                }
                System.out.println("");
            } while (BJ.fail == 2);


            BJ.nbreCartes++;

            if (carte == 11 || carte == 12 || carte == 0) {
                carte = 10;
            }
            if (carte == 1) {
                if (BJ.iJoueur <= 10) {
                    carte = 11;
                    BJ.rappelJoueur = 2;
                }
            }
            BJ.iJoueur += carte;
            BJ.lblTotalJoueur.setText("Total: " + BJ.iJoueur);
            BJ.btnArreterJoueur.setEnabled(true);

            if (BJ.iJoueur > BJ.bust) {
                if (BJ.rappelJoueur == 2) {
                    BJ.iJoueur -= 10;
                    BJ.lblTotalJoueur.setText("Total: " + BJ.iJoueur);
                    BJ.rappelJoueur = 1;
                } else // rappel == 1
                {
                    BJ.btnPiocherJoueur.setEnabled(false);
                    JOptionPane.showMessageDialog(null, "Vous avez sauté! (dépasser 21)");
                }
            } else if (BJ.iJoueur == BJ.bust) {
                BJ.btnPiocherJoueur.setEnabled(false);
                JOptionPane.showMessageDialog(null, "BlackJack!");
            }
            BJ.panneau1.revalidate();
            BJ.panneau1.repaint();
        }
        if (ae.getSource() == BJ.btnArreterJoueur) {

            BJ.nbreCartes = 0;
            BJ.cartes.clear();
            BJ.rappelJoueur = 1;
            BJ.btnArreterJoueur.setEnabled(false);
            BJ.btnPiocherJoueur.setEnabled(false);
            BJ.btnPiocherCroupier.setEnabled(true);

        }
        if (ae.getSource() == BJ.btnPiocherCroupier) {
            //Piger une carte, l'ajouter au panneau et gérer les nombres du jeu
            do {
                BJ.carteAleatoire = BJ.aleatoire.nextInt(52) + 1;
                BJ.cartes.add(BJ.carteAleatoire);
                position = BJ.cartes.size() - 1;
                System.out.println("Position :" + position);
                carte = (BJ.cartes.get(position)) % 13;
                System.out.print("Nouvelle Carte: " + BJ.cartes.get(position) + "\n");
                for (int i = 0; i < position; i++) {
                    if (BJ.cartes.get(i) == BJ.cartes.get(position)) {
                        BJ.fail = 2;
                        System.out.println("ÉPIC FAIL!");
                        BJ.cartes.remove(position);
                        BJ.carteAleatoire = BJ.aleatoire.nextInt(52) + 1;
                        BJ.cartes.add(BJ.carteAleatoire);
                        i = 0;
                        System.out.println("Position :" + position);
                        carte = (BJ.cartes.get(position)) % 13;
                        System.out.print("Nouvelle Carte: " + BJ.cartes.get(position) + "\n");
                    } else {
                        BJ.fail = 1;
                        System.out.println("Normal Fail");
                    }
                }
                System.out.println("");
            } while (BJ.fail == 2);

            BJ.nbreCartes++;

            if (carte == 11 || carte == 12 || carte == 0) {
                carte = 10;
            }
            if (carte == 1) {
                if (BJ.iCroupier <= 10) {
                    carte = 11;
                    BJ.rappelCroupier = 2;
                }
            }
            BJ.iCroupier += carte;
            BJ.lblTotalCroupier.setText("Total: " + BJ.iCroupier);

            if (BJ.iCroupier > BJ.bust) {
                if (BJ.rappelCroupier == 2) {
                    BJ.iCroupier -= 10;
                    BJ.lblTotalCroupier.setText("Total: " + BJ.iCroupier);
                    BJ.rappelCroupier = 1;
                } else // rappel == 1
                {
                    JOptionPane.showMessageDialog(null, "Le croupier a sauté! (dépasser 21)");
                }
            } else if (BJ.iCroupier == BJ.bust) {
                JOptionPane.showMessageDialog(null, "Le croupier a fait un BlackJack!");
            }

            if (BJ.iCroupier >= BJ.bust - 4) {
                BJ.btnArreterCroupier.setEnabled(true);
                BJ.btnPiocherCroupier.setEnabled(false);
            }

            BJ.panneau1.revalidate();
            BJ.panneau1.repaint();
        }
        if (ae.getSource() == BJ.btnArreterCroupier) {
            BJ.btnArreterCroupier.setEnabled(false);
            BJ.rappelCroupier = 1;
            if ((BJ.iCroupier < BJ.bust) && (BJ.iJoueur < BJ.bust) && (BJ.iCroupier < BJ.iJoueur)) {
                JOptionPane.showMessageDialog(null, "Vous avez gagné! (2x votre mise)");
                BJ.frame.argent += BJ.mise;
                BJ.differentielJoueur += BJ.mise;
                BJ.lblStatsJoueurArgent.setText("Montant d'argent: " + frame.argent + "$");
                BJ.lblStatsJoueurDifferentiel.setText("Differentiel: " + BJ.differentielJoueur + "$");
            } else if ((BJ.iCroupier > BJ.bust) && (BJ.iJoueur < BJ.bust)) {
                JOptionPane.showMessageDialog(null, "Vous avez gagné! (2x votre mise)");
                BJ.frame.argent += BJ.mise;
                BJ.differentielJoueur += BJ.mise;
                BJ.lblStatsJoueurArgent.setText("Montant d'argent: " + frame.argent + "$");
                BJ.lblStatsJoueurDifferentiel.setText("Differentiel: " + BJ.differentielJoueur + "$");
            } else if ((BJ.iCroupier > BJ.bust) && (BJ.iJoueur > BJ.bust) && (BJ.iCroupier < BJ.iJoueur)) {
                JOptionPane.showMessageDialog(null, "Vous avez gagné! (2x votre mise)");
                BJ.frame.argent += BJ.mise;
                BJ.differentielJoueur += BJ.mise;
                BJ.lblStatsJoueurArgent.setText("Montant d'argent: " + frame.argent + "$");
                BJ.lblStatsJoueurDifferentiel.setText("Differentiel: " + BJ.differentielJoueur + "$");
            } else if (BJ.iJoueur == BJ.bust) {
                JOptionPane.showMessageDialog(null, "Vous avez gagné! (2x votre mise)");
                BJ.frame.argent += BJ.mise;
                BJ.differentielJoueur += BJ.mise;
                BJ.lblStatsJoueurArgent.setText("Montant d'argent: " + frame.argent + "$");
                BJ.lblStatsJoueurDifferentiel.setText("Differentiel: " + BJ.differentielJoueur + "$");
            } else if (!(BJ.iJoueur == BJ.bust) && (BJ.iCroupier == BJ.iJoueur)) {
                JOptionPane.showMessageDialog(null, "Vous avez annulé! (Vous gardez votre mise)");
                BJ.lblStatsJoueurArgent.setText("Montant d'argent: " + frame.argent + "$");
                BJ.lblStatsJoueurDifferentiel.setText("Differentiel: " + BJ.differentielJoueur + "$");
            } else {
                JOptionPane.showMessageDialog(null, "Vous avez perdu! (Votre mise)");
                frame.argent -= BJ.mise;
                BJ.differentielJoueur -= BJ.mise;
                BJ.lblStatsJoueurArgent.setText("Montant d'argent: " + frame.argent + "$");
                BJ.lblStatsJoueurDifferentiel.setText("Differentiel: " + BJ.differentielJoueur + "$");
            }

            BJ.lblTotalJoueur.setText("Total: 0");
            BJ.lblTotalCroupier.setText("Total: 0");
            BJ.txtMise.setText("Mise: 0$");
            BJ.btnQuitter.setEnabled(true);
            BJ.prochaineManche();
        }
    }
}
